let fs = require('fs');
let path = require('path');
let router = require('koa-router')();

// 寻找指定路径下的路由文件
function searchControllers(defaultDir){
    // 利用文件模块，读取控制器目录下的所有文件
    let files = fs.readdirSync(defaultDir);
    // 筛选真实的路径文件
    let resultFiles = files.filter((fileName) => {
        return fileName.endsWith('.js') && fileName !== 'index.js';
    });

    return resultFiles;
}

// 注册给定的路由数组下的所有定义的路由
function registeForEachFile(files,currentPath){
   files.forEach(item=>{
       let temPath = path.join(currentPath,item);
       let routerObj = require(temPath);

       for(let r in routerObj){
            let type = routerObj[r][0];
            let fn = routerObj[r][1];

            if(type === 'get'){
                router.get(r,fn);
            }else{
                router.post(r,fn);
            }
       }
   })
}


// 3、将本文件当作控制器目录的入口，在app.js当中作为中间注册

module.exports = function(dir){
    let defaultDir=dir || '/controllers';
    // 项目当前绝对路径
    let root = path.resolve('.');
    // 获得控制器的绝对路径
    let resultControllerPath = path.join(root, defaultDir);

    // 获得控制器目录下的所有路由文件
    let files=searchControllers(resultControllerPath);

    // 注册定义的路由
    registeForEachFile(files,resultControllerPath);

    //返回待在app执行的注册函数
    return router.routes();
};